package com.erdos.core.service;

import java.util.List;
import java.util.Locale;
import java.util.Map;

import com.erdos.common.pagination.Page;
import com.erdos.common.service.BaseService;
import com.erdos.core.entity.AttributeValue;
import com.erdos.core.entity.AttributeValueVO;

public interface AttributeValueService extends BaseService<AttributeValue> {

	/**
	 * 传入一个object代码和工厂代码facilityId ，返回对应的属性值集合
	 * 主要用于对象创建的场景
	 * @param object 对象代码
	 * @param facilityId 工厂代码 @see com.hp.common.util.AppContext.getFacility()
	 * @param locale 语言区域 在Action得到Locale对象，Struts2语法：ActionContext.getContext().getLocale()
	 * @return
	 * @author xiali2
	 * @since  2008-7-23
	 */
	public List<AttributeValueVO> findAttributeValues(String object,
			String facilityId,Locale locale);
	
	public List<AttributeValueVO> findAttributeValues(String object,
			String facilityId, Locale locale,Map<String, Object> attParams);

	/**
	 * 根据object代码、工厂代码facilityId 、instanceSid对象主键，查询对应的属性值集合
	 * 主要用于对象编辑的场景
	 * @param object 对象代码
	 * @param facilityId 工厂代码 @see com.hp.common.util.AppContext.getFacility()
	 * @param locale 语言区域 在Action得到Locale对象，Struts2语法：ActionContext.getContext().getLocale()
	 * @return
	 * @author xiali2
	 * @since  2008-7-21
	 */
	public List<AttributeValueVO> findAttributeValues(String object,
			String facilityId, Long instanceSid,Locale locale);
	
	/**
	 * 根据object代码、工厂代码facilityId 、instanceSid对象主键，group分组参数查询对应的属性值集合
	 * 主要用于对象编辑或实例对象扩展属性显示的场景
	 * @param object 对象代码
	 * @param facilityId 工厂代码 @see com.hp.common.util.AppContext.getFacility()
	 * @param locale 语言区域 在Action得到Locale对象，Struts2语法：ActionContext.getContext().getLocale()
	 * @param params 除以上定义的标准输入参数，其他额外参数以Map方式传入
	 * @return
	 * @author xiali2
	 * @since  2008-7-21
	 */
	public List<AttributeValueVO> findAttributeValues(String object,
			String facilityId, Long instanceSid,Locale locale,Map<String, Object> params);
	
	/**
	 * 根据object代码、工厂代码facilityId 、instanceSid对象主键，group分组参数分页查询对应的属性值集合
	 * 主要用于对象编辑或实例对象扩展属性显示的场景
	 * @param object 对象代码
	 * @param facilityId 工厂代码 @see com.hp.common.util.AppContext.getFacility()
	 * @param locale 语言区域 在Action得到Locale对象，Struts2语法：ActionContext.getContext().getLocale()
	 * @param params 除以上定义的标准输入参数，其他额外参数以Map方式传入
	 * @param pageNo 查询页码 
	 * @param limit 每页限定记录数
	 * @return
	 * @author xiali2
	 * @since  2008-7-21
	 */
	public Page<AttributeValueVO> findAttributeValues(String object,
			String facilityId, Long instanceSid,Locale locale,Map<String, Object> params,int pageNo, int limit);
	
	/**
	 * 传入组装好的AttributeValueVO集合，接口负责保存
	 * @param attributeValues
	 */
	public void saveAttributeValues(List<AttributeValueVO> attributeValues);

	/**
	 * 根据object代码、工厂代码facilityId 、instanceSid对象主键删除相关的value记录
	 * 主要用于对象删除的场景
	 * @param object
	 * @param facilityId
	 * @param instanceSid
	 * @author xiali2
	 * @since  2008-7-23
	 */
	public void deleteAttributeValues(String object, String facilityId,
			Long instanceSid);
	
	/**
	 * Value历史记录处理
	 * @param object
	 * @param instanceSid
	 * @param params params需要put以下两个属性值：
	 * params.put("TRANSACTION_ID", 事务代码);@see com.hp.common.constant.HistoryTransitionId
	 * params.put("EVENT_ID", 事件代码);
	 * @return
	 * @author xiali2
	 * @since  2008-8-11
	 */
	public void insertHistory(String object, Long instanceSid,Map<String,Object> params);
	
	/**
	 * 查询最大历史记录号
	 * @param object
	 * @param instanceSid
	 * @return
	 * @author xiali2
	 * @since  2008-8-5
	 */
	public Long findMaxHistorySequence(String object, Long instanceSid) ;
	
	/**
	 * 判断object定义是否有正确配置
	 * @param object
	 * @return true：已配置 false：未配置
	 * @author xiali2
	 * @since  2008-8-25
	 */
	public boolean checkReftableConfigComlete(String object);
	

	
	/**
	 * 根据object代码、工厂代码facilityId 、instanceSid对象主键、区域locale、额外参数查询扩展属性分页记录
	 * @param object 对象代码
	 * @param facilityId 工厂代码 @see com.hp.common.util.AppContext.getFacility()
	 * @param locale 语言区域 在Action得到Locale对象，Struts2语法：ActionContext.getContext().getLocale()
	 * @param attParams 除以上定义的标准输入参数，其他额外参数以Map方式传入
	 * @param pageNo 查询页码 
	 * @param limit 每页限定记录数
	 * @return
	 * @author xiali2
	 * @since  2008-7-21
	 */
	public Page<AttributeValueVO> findRealAttributeValues(String object,
			String facilityId, Long instanceSid,Locale locale,Map<String, Object> attParams,int pageNo, int limit);
	
	/**
	 * 根据object代码、工厂代码facilityId 、instanceSid对象主键、区域locale、额外参数查询扩展属性
	 * @param object 对象代码
	 * @param facilityId 工厂代码 @see com.hp.common.util.AppContext.getFacility()
	 * @param locale 语言区域 在Action得到Locale对象，Struts2语法：ActionContext.getContext().getLocale()
	 * @param attParams 除以上定义的标准输入参数，其他额外参数以Map方式传入
	 * @return
	 * @author xiali2
	 * @since  2008-7-21
	 */
	public List<AttributeValueVO> findRealAttributeValues(String object,
			String facilityId, Long instanceSid,Locale locale,Map<String, Object> attParams);
}
